package cn.iocoder.yudao.module.jifenyuan.service.roomuserbind;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.jifenyuan.controller.app.roomuserbind.vo.*;
import cn.iocoder.yudao.module.jifenyuan.dal.dataobject.room.RoomWithUsersDo;
import cn.iocoder.yudao.module.jifenyuan.dal.dataobject.roomuserbind.RoomUserBindDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.jifenyuan.dal.dataobject.roomuserbind.RoomUserBindWithInfoDO;

/**
 * 记分员 房间与成员绑定 Service 接口
 *
 * @author 芋道源码
 */
public interface RoomUserBindService {

    /**
     * 创建记分员 房间与成员绑定
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createRoomUserBind(@Valid AppRoomUserBindCreateReqVO createReqVO);

    List<RoomUserBindWithInfoDO> getRoomDetail(Long roomId);

    /**
     * 更新记分员 房间与成员绑定
     *
     * @param updateReqVO 更新信息
     */
    void updateRoomUserBind(@Valid AppRoomUserBindUpdateReqVO updateReqVO);

    int addScore(Long roomId, Long userId, Long score);

    int reduceScore(Long roomId, Long userId, Long score);

    /**
     * 删除记分员 房间与成员绑定
     *
     * @param id 编号
     */
    void deleteRoomUserBind(Long id);

    /**
     * 获得记分员 房间与成员绑定
     *
     * @param id 编号
     * @return 记分员 房间与成员绑定
     */
    RoomUserBindDO getRoomUserBind(Long id);

    /**
     * 获得记分员 房间与成员绑定列表
     *
     * @param ids 编号
     * @return 记分员 房间与成员绑定列表
     */
    List<RoomUserBindDO> getRoomUserBindList(Collection<Long> ids);

    Long getCountByUserId();

    /**
     * 获得记分员 房间与成员绑定分页
     *
     * @param pageReqVO 分页查询
     * @return 记分员 房间与成员绑定分页
     */
    PageResult<RoomWithUsersDo> getRoomUserBindPage(AppRoomUserBindPageReqVO pageReqVO);

    /**
     * 获得记分员 房间与成员绑定列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 记分员 房间与成员绑定列表
     */
    List<RoomUserBindDO> getRoomUserBindList(AppRoomUserBindExportReqVO exportReqVO);

}
